package cn.edu.tju.elm.repository;

import cn.edu.tju.elm.model.Cart;
import cn.edu.tju.elm.model.Food;
import cn.edu.tju.elm.model.Business;
import cn.edu.tju.core.model.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface CartRepository extends JpaRepository<Cart, Long> {
    // 根据用户、食品和商家查找购物车项（已存在）
    Optional<Cart> findByCustomerAndFoodAndBusiness(User customer, Food food, Business business);
    
    // 根据用户查找所有购物车项
    List<Cart> findByCustomer(User customer);
    
    // 根据ID和用户查找购物车项（用于权限验证）
    Optional<Cart> findByIdAndCustomer(Long id, User customer);
    
    // 检查购物车项是否存在且属于用户
    boolean existsByIdAndCustomer(Long id, User customer);
    
    // 根据用户删除所有购物车项（清空购物车）
    void deleteByCustomer(User customer);
    
    // 根据用户和ID删除购物车项
    void deleteByIdAndCustomer(Long id, User customer);
    
    // 统计用户购物车中的商品总数
    @Query("SELECT SUM(c.quantity) FROM Cart c WHERE c.customer = :customer")
    Integer sumQuantityByCustomer(@Param("customer") User customer);
    
    // 统计用户购物车中的商品总金额
    @Query("SELECT SUM(c.food.foodPrice * c.quantity) FROM Cart c WHERE c.customer = :customer")
    Double sumAmountByCustomer(@Param("customer") User customer);
    
    // 统计用户购物车中的商品种类数
    @Query("SELECT COUNT(c) FROM Cart c WHERE c.customer = :customer")
    Integer countByCustomer(@Param("customer") User customer);
    
    // 添加根据用户和商家查找购物车项的方法
    List<Cart> findByCustomerAndBusiness(User customer, Business business);
}